/* 
通过Proxy+Reflect实现对象的数据劫持
*/

// 被代理的目标对象
const target = {
  name: '小浪',
  age: 22,
}




function reactive(target) {

  const handler = {
    // 监视读
    get (target, key) {
      console.log('监视到读取属性', key)
      // return target[key]
      return Reflect.get(target, key)
    },

    // 监视修改和添加
    set (target, key, value) {
      console.log('监视到修改和添加', key, value)
      const result = Reflect.set(target, key, value)
      return result
    },

    // 监视删除属性
    deleteProperty(target, key) {
      console.log('监视到删除属性', key)
      const result = Reflect.deleteProperty(target, key)
      return result
    }
  }
  
  return new Proxy(target, handler)
}

const proxy = reactive(target)

// 代理读
// console.log(proxy.name)
// 代理修改
// proxy.name = 'aaa'
// 代理添加
// proxy.sex = '男'
// 代理删除
delete proxy.name

console.log(target)
